package com.holyn.guofang.model.webhttp.observable;

import com.holyn.guofang.model.webhttp.wo.DeviceWo;
import com.holyn.guofang.model.webhttp.wo.StatusWo;
import com.holyn.guofang.model.webhttp.wo.UserInfoWo;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by Holyn on 2017/6/28.
 */

public interface UserLoginedObservable {

//    /**
//     * 更换设备后进行登录验证。
//     * 网页端在登录验证后平台验证码、用户 ID、登录 ID、登录验 证码以上信息会存储到 Session 中，
//     * 以上信息的 Session 名称分别是 platformCheckCode、userID、loginID、 loginCheckCode。
//     *
//     * @param userName 账号或手机号码或邮箱
//     * @param validCode 手机号码或电子邮箱接收到的验证码
//     * @return
//     */
//    @FormUrlEncoded
//    @POST("loginCheck.ashx")
//    Observable<UserInfoWo> loginCheck(
//            @Field("userName") String userName,
//            @Field("validCode") String validCode
//    );

    /**
     * 注销登录。String userName是站位的
     * 注意:该接口调用后会删除登录信息，若不需要删除登录信息请不要调用该接口。
     *
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("logout.ashx")
    Observable<StatusWo> logout(
            @Field("userName") String userName
    );

    /**
     * 2.3.8 获取注册信息。String userName是站位的
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("userInfo.ashx")
    Observable<UserInfoWo> userInfo(
            @Field("userName") String userName
    );

    /**
     * 2.3.9 获取解绑验证码。String userName是站位的
     *
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配，-6:同一设备 1 分钟内验证超过 1 次)
     */
    @FormUrlEncoded
    @POST("getUnBindCode.ashx")
    Observable<StatusWo> getUnBindCode(
            @Field("userName") String userName
    );

    /**
     * 2.3.10 获取绑定验证码
     *
     * @param checkMethod 验证方法( :手机号码， :电子邮箱)
     * @param equipmentCode 手机号码或电子邮箱地址
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配，
     *           -6:手机号码 或电子邮箱与其他用户重复，-7:同一设备 1 分钟 内验证超过 1 次)
     */
    @FormUrlEncoded
    @POST("getBindCode.ashx")
    Observable<StatusWo> getBindCode(
            @Field("checkMethod") String checkMethod,
            @Field("equipmentCode") String equipmentCode
    );

    /**
     * 修改注册信息。
     *
     * @param name 姓名
     * @param mobile 手机号码
     * @param email 电子邮箱
     * @param address 地址
     * @param country 国籍
     * @param area 所属行政区
     * @param contact 联系人
     * @param contactTel 联系人电话
     * @param contactMobile 联系人手机号码
     * @param contactEmail 联系人电子邮箱
     * @param checkMethod 验证方法(0:手机，1:电子邮箱，空为不修改)
     * @param newCheckMethod 新验证方法(0:手机，1:电子邮箱，checkMethod 不为空该参数才有效)
     * @param unBindCode 解绑验证码(checkMethod 不为空该参数才有效， 通过 2.3.9 接口获取)
     * @param bindCode 绑定验证码(checkMethod 不为空该参数才有效， 通过 2.3.10 接口获取)
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，
     *          -3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配，-6:手机号 码与其他用户重复，
     *          -7:电子邮箱与其他用户重复， -8:验证手机号码或邮箱已更改但未设置验证，-9: 解绑验证码不匹配，
     *          -10:绑定验证码不匹配)
     */
    @FormUrlEncoded
    @POST("updateUserInfo.ashx")
    Observable<StatusWo> updateUserInfo(
            @Field("name") String name,
            @Field("mobile") String mobile,
            @Field("email") String email,
            @Field("address") String address,
            @Field("country") String country,
            @Field("area") String area,
            @Field("contact") String contact,
            @Field("contactTel") String contactTel,
            @Field("contactMobile") String contactMobile,
            @Field("contactEmail") String contactEmail,
            @Field("checkMethod") String checkMethod,
            @Field("newCheckMethod") String newCheckMethod,
            @Field("unBindCode") String unBindCode,
            @Field("bindCode") String bindCode
    );

    /**
     * 获取修改密码验证码
     *
     * @param userName
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配，
     *              -6:同一设备 一分钟内验证次数超过 1 次，-7:手机号码或电子 邮箱验证次数超过当天限制)
     */
    @FormUrlEncoded
    @POST("getNewPasswordCode.ashx")
    Observable<StatusWo> getNewPasswordCode(
            @Field("userName") String userName
    );

    /**
     * 修改登录密码。
     *
     * @param oldPassword 旧密码(经 32 位 MD5 加密)
     * @param newPassword 新密码(经 32 位 MD5 加密)
     * @param validCode 手机号码或电子邮箱接收到的验证码
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，
     *          -3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配，-6:旧密码不 匹配，
     *          -7:手机号码或电子邮箱接收到的验证码不 匹配)
     */
    @FormUrlEncoded
    @POST("updatePassword.ashx")
    Observable<StatusWo> updatePassword(
            @Field("oldPassword") String oldPassword,
            @Field("newPassword") String newPassword,
            @Field("validCode") String validCode
    );

    /**
     * 2.3.16 获取设备列表
     *
     * @param mainDevice 是否主设备(1:是，0:否，其余值不限)
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("deviceList.ashx")
    Observable<DeviceWo> deviceList(
            @Field("mainDevice") int mainDevice
    );

    @FormUrlEncoded
    @POST("deviceListb.ashx")
    Observable<DeviceWo> deviceListb(
            @Field("mainDevice") int mainDevice
    );

    /**
     * 2.3.17 修改设备备注
     *
     * @param remark
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:没有用户信息， -2:没有登录信息，-3:登录信息中的用户与用户 信息中的用户不匹配，-4:登录已过期，-5:验证码 不匹配)
     */
    @FormUrlEncoded
    @POST("updateDeviceRemark.ashx")
    Observable<StatusWo> updateDeviceRemark(
            @Field("deviceID") Integer deviceID,
            @Field("remark") String remark
    );

    @FormUrlEncoded
    @POST("updateDeviceRemarkb.ashx")
    Observable<StatusWo> updateDeviceRemarkb(
            @Field("deviceID") Integer deviceID,
            @Field("remark") String remark
    );

    /**
     * 获取更换主设备验证码。
     *
     * @param userName
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:没有用户信息， -2:没有登录信息，-3:登录信息中的用户与用户 信息中的用户不匹配，-4:登录已过期，-5:验证码 不匹配)
     */
    @FormUrlEncoded
    @POST("getMainDeviceCode.ashx")
    Observable<StatusWo> getMainDeviceCode(
            @Field("userName") String userName
    );

    /**
     * 更换主设备。
     *
     * @param deviceID 新主设备 ID
     * @param validCode 手机号码或电子邮箱接收到的验证码
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:没有用户信息， -2:没有登录信息，-3:登录信息中的用户与用户 信息中的用户不匹配，-4:登录已过期，-5:验证码 不匹配)
     */
    @FormUrlEncoded
    @POST("updateMainDevice.ashx")
    Observable<StatusWo> updateMainDevice(
            @Field("deviceID") int deviceID,
            @Field("validCode") String validCode
    );

    /**
     * 2.3.20 授权设备。
     *
     * @param deviceID 设备 ID
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:没有用户信息， -2:没有登录信息，-3:登录信息中的用户与用户 信息中的用户不匹配，-4:登录已过期，-5:验证码 不匹配)
     */
    @FormUrlEncoded
    @POST("updateAuthorize.ashx")
    Observable<StatusWo> updateAuthorize(
            @Field("deviceID") int deviceID
    );

    @FormUrlEncoded
    @POST("updateAuthorizeb.ashx")
    Observable<StatusWo> updateAuthorizeb(
            @Field("deviceID") int deviceID
    );

    /**
     * 2.3.21 删除设备
     *
     * @param deviceID 设备 ID
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:没有用户信息， -2:没有登录信息，-3:登录信息中的用户与用户 信息中的用户不匹配，-4:登录已过期，-5:验证码 不匹配)
     */
    @FormUrlEncoded
    @POST("deleteDevice.ashx")
    Observable<StatusWo> deleteDevice(
            @Field("deviceID") int deviceID
    );

    /**
     * 终止附属号授权。（不删除附属号记录）
     * @param deviceID
     * @return
     */
    @FormUrlEncoded
    @POST("updateAuthorizeStop.ashx")
    Observable<StatusWo> updateAuthorizeStop(
            @Field("deviceID") int deviceID
    );
}
